from dash import html, dcc
import feffery_utils_components as fuc
import feffery_antd_components as fac

import callbacks.index_c
from model import UserAccount


def render_content(username, gender, role, register_time):

    # 根据用户名获取密码信息
    password = list(
        UserAccount
        .select()
        .where(UserAccount.username == username)
        .dicts()
    )[0]['password']

    return fuc.FefferyTopProgress(
        html.Div(
            [
                # 重定向容器
                html.Div(id='index-redirect-container'),

                # 全局消息提示
                html.Div(
                    id='index-message-container'
                ),

                # 缓存
                dcc.Store(
                    id='index-cache-login-username',
                    data={
                        'username': username
                    }
                ),

                # 注入相关modal
                html.Div(
                    [
                        # 个人资料面板
                        fac.AntdModal(
                            [
                                fac.AntdForm(
                                    [
                                        fac.AntdFormItem(
                                            fac.AntdText(
                                                username,
                                                copyable=True
                                            ),
                                            label='用户名'
                                        ),
                                        fac.AntdFormItem(
                                            fac.AntdText(
                                                gender,
                                                copyable=True
                                            ),
                                            label='性别'
                                        ),
                                        fac.AntdFormItem(
                                            fac.AntdText(
                                                role,
                                                copyable=True
                                            ),
                                            label='角色'
                                        ),
                                        fac.AntdFormItem(
                                            fac.AntdText(
                                                password,
                                                copyable=True
                                            ),
                                            label='密码'
                                        ),
                                        fac.AntdFormItem(
                                            fac.AntdText(
                                                register_time
                                                .strftime(
                                                    '%Y-%m-%d %H:%M:%S'
                                                ),
                                                copyable=True
                                            ),
                                            label='注册时间'
                                        )
                                    ],
                                    labelCol={
                                        'span': 4
                                    }
                                ),

                            ],
                            id='index-personal-info-modal',
                            title='个人资料',
                            mask=False
                        ),

                        # 用户角色为管理员时注入用户管理modal
                        *(
                            [
                                fac.AntdModal(
                                    fac.AntdSkeleton(
                                        html.Div(
                                            id='index-user-manage-modal-children-container'
                                        ),
                                        active=True,
                                        listenPropsMode='include',
                                        includeProps=[
                                            'index-user-manage-modal-children-container.children'
                                        ]
                                    ),
                                    id='index-user-manage-modal',
                                    title='用户管理',
                                    mask=False,
                                    width=800
                                )
                            ] if role == '管理员' else []
                        )
                    ]
                ),

                # 平台主页面页首
                fac.AntdRow(
                    [
                        # 页首左侧标题区域
                        fac.AntdCol(
                            html.Div(
                                fac.AntdText(
                                    '净值分析测试平台',
                                    style={
                                        'fontSize': '30px',
                                        'paddingLeft': '20px'
                                    }
                                ),
                                style={
                                    'height': '100%',
                                    'display': 'flex',
                                    'alignItems': 'center'
                                }
                            )
                        ),

                        # 页首右侧用户信息区域
                        fac.AntdCol(
                            fac.AntdSpace(
                                [
                                    fac.AntdTooltip(
                                        fac.AntdAvatar(
                                            mode='text',
                                            size=36,
                                            text=username,
                                            style={
                                                'background': 'gold' if role == '管理员' else (
                                                    '#3498db' if gender == '男' else '#ff6b81'
                                                )
                                            }
                                        ),
                                        title='当前用户：'+username,
                                        placement='bottom'
                                    ),

                                    fac.AntdDropdown(
                                        id='index-header-dropdown',
                                        title='个人中心',
                                        arrow=True,
                                        menuItems=[
                                            {
                                                'title': '个人资料',
                                                'key': '个人资料'
                                            },
                                            *(
                                                [
                                                    {
                                                        'title': '用户管理',
                                                        'key': '用户管理'
                                                    }
                                                ]
                                                if role == '管理员'
                                                else []
                                            ),
                                            {
                                                'isDivider': True
                                            },
                                            {
                                                'title': '退出登录',
                                                'key': '退出登录'
                                            },
                                        ],
                                        placement='bottomRight',
                                        overlayStyle={
                                            'width': '100px'
                                        }
                                    )
                                ],
                                style={
                                    'height': '100%',
                                    'float': 'right',
                                    'paddingRight': '50px',
                                    'display': 'flex',
                                    'alignItems': 'center'
                                }
                            ),
                            flex=1
                        )
                    ],
                    style={
                        'height': '64px',
                        'boxShadow': 'rgb(240 241 242) 0px 2px 14px',
                        'background': 'white',
                        'marginBottom': '5px',
                        'position': 'sticky',
                        'top': 0,
                        'zIndex': 999
                    }
                ),
                
                # 页面内容
                html.Div(
                    [
                        # 下载模板
                        fac.AntdRow(
                            [
                                fac.AntdCol(
                                    fac.AntdButton(
                                        '下载日净值模板',
                                        href='/download?file=日净值模板.xlsx',
                                        type='primary',
                                    ),
                                ),
                                fac.AntdCol(
                                    fac.AntdButton(
                                        '下载周净值模板',
                                        href='/download?file=周净值模板.xlsx',
                                        type='primary'
                                    ),
                                ),
                            ],
                            gutter=10,
                            style={
                                'padding': '0 0 15px 0'
                            }
                        ),

                        # 上传文件
                        fac.AntdDraggerUpload(
                            id='index-upload',
                            apiUrl='/upload',
                            text='拖拽上传文件',
                            hint='点击或拖拽文件至此处进行上传, 只支持xlsx格式文件',
                            fileTypes=['xlsx']
                        ),

                        fac.AntdTabs(
                            [
                                fac.AntdTabPane(
                                    fac.AntdSpin(
                                        fac.AntdTable(
                                            id='index-day-worth-table',
                                            columns=[
                                                {
                                                    'title': '#',
                                                    'dataIndex': 'id',
                                                },
                                                {
                                                    'title': '创建者',
                                                    'dataIndex': 'creator',
                                                },
                                                {
                                                    'title': '上传时间',
                                                    'dataIndex': 'create_time',
                                                },
                                                {
                                                    'title': '日期',
                                                    'dataIndex': 'dt',
                                                },
                                                {
                                                    'title': '日净值',
                                                    'dataIndex': 'value',
                                                },
                                                {
                                                    'title': '输出结果',
                                                    'dataIndex': 'output',
                                                },
                                            ],
                                            bordered=True,
                                            sortOptions={
                                                'sortDataIndexes': ['create_time', 'dt']
                                            },
                                            filterOptions={
                                                'output': {
                                                    'filterSearch': True
                                                },
                                            }
                                        ),
                                        text='数据加载中...'
                                    ),
                                    tab='日净值',
                                    key='日净值'
                                ),
                                fac.AntdTabPane(
                                    fac.AntdSpin(
                                        fac.AntdTable(
                                            id='index-week-worth-table',
                                            columns=[
                                                {
                                                    'title': '#',
                                                    'dataIndex': 'id',
                                                },
                                                {
                                                    'title': '创建者',
                                                    'dataIndex': 'creator',
                                                },
                                                {
                                                    'title': '上传时间',
                                                    'dataIndex': 'create_time',
                                                },
                                                {
                                                    'title': '日期',
                                                    'dataIndex': 'dt',
                                                },
                                                {
                                                    'title': '周净值',
                                                    'dataIndex': 'value',
                                                },
                                                {
                                                    'title': '输出结果',
                                                    'dataIndex': 'output',
                                                },
                                            ],
                                            bordered=True,
                                            sortOptions={
                                                'sortDataIndexes': ['create_time', 'dt']
                                            },
                                            filterOptions={
                                                'output': {
                                                    'filterSearch': True
                                                },
                                            }
                                        ),
                                        text='数据加载中...'
                                    ),
                                    tab='周净值',
                                    key='周净值'
                                )
                            ]
                        ),
                    ],
                    style={
                        'padding': '20px 20px'
                    }
                )
            ],
        ),
        listenPropsMode='include',
        includeProps=[
            'index-main-content-container.children'
        ]
    )
